import akshare as ak
import pandas as pd
import datetime
import os
import time

# 获取当下所有的实时数据（如果现在11:30，那么获取的数据就是11:30的）
def getRealTimeData():
    # 获取当下所有股票实时数据
    stock_zh_a_spot_em_df = ak.stock_zh_a_spot_em();
    # 获取所有行的 代码列、名称列、成交量列
    stock_zh_a_spot_em_df.loc[:,["代码","名称","成交量"]];
    



    print(stock_zh_a_spot_em_df)

# 获取所有股票的代码和名称，剔除ST股票和北交所的股票
def get_all_stock_code():
    stock_zh_a_spot_df = ak.stock_zh_a_spot_em()
    # 添加异常处理
    try:
        # 添加过滤条件
        filtered_df = stock_zh_a_spot_df[
            (~stock_zh_a_spot_df['名称'].str.contains('ST')) &  # 排除ST股票
            (~stock_zh_a_spot_df['代码'].str.startswith(('8', '4')))  # 排除北交所股票（代码以8/4开头）
        ]
        return filtered_df[['代码', '名称']].to_dict(orient='records') #type: ignore
    except KeyError as e:
        print(f"数据列缺失错误: {e}")
        return []
#将股票代码、名称写入CSV文件
def writeToCsv(data):
    # 获取当前日期
    current_date = datetime.datetime.now().strftime("%Y-%m-%d")
    # 构建文件名
    filename = f"{current_date}_stock_data.csv"
    filename = "stock_data.csv";
    #如果文件不存在
    if not os.path.exists(filename):
        # 创建一个新的DataFrame
        # df = pd.DataFrame(columns=['代码', '名称']);
        # 将数据添加到DataFrame
        df = pd.DataFrame(data);
        # 将DataFrame写入CSV文件
        df.to_csv(filename, index=False,header=False);

#读取CSV文件，如果数据不存在返回空，存在数据都返回
def readCsv():
    # 获取当前日期
    #current_date = datetime.datetime.now().strftime("%Y-%m-%d")
    # 构建文件名
    #filename = f"{current_date}_stock_data.csv"
    filename = "stock_data.csv";
    #如果文件不存在
    if not os.path.exists(filename):
        return pd.DataFrame();
    else:
        #读取CSV文件
        df = pd.read_csv(filename);
        print(df)
        return df;


#根据传入时间获取前一天的股票数据
def get_stock_data(stock_code, date_str, fields):
    stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol=stock_code, period="daily", start_date=date_str, end_date=date_str,
                                            adjust="")
    if stock_zh_a_hist_df.empty:
        return None
    return stock_zh_a_hist_df.iloc[0][fields]

#获取股票指定日期 11点半之前的成交量
def get_stock_volume_till_1130(stock_code, date_str):
    """
    获取指定股票在指定日期 9:30 - 11:30 的成交量总和
    :param stock_code: 股票代码（如 "000001"）
  """

# 获取当天收盘所有股票数据（注必须下午3:00以后跑），并写入csv文件
def get_stock_data_today():
    # 获取当前日期
    current_date = datetime.datetime.now()
    # 构建文件名
    filename = f"{current_date.strftime('%Y-%m-%d')}_stock_data.csv"
    # 如果文件不存在
    if not os.path.exists(filename):
        # 获取所有股票代码和名称
        stock_data = get_all_stock_code()
        # 将数据添加到DataFrame
        df = pd.DataFrame(stock_data)
        # 将DataFrame写入CSV文件
        df.to_csv(filename, index=False)
        print(f"已将股票数据写入文件 {filename}")
    else:
        print(f"文件 {filename} 已存在，无需再次获取数据")
        

if __name__ == '__main__':
    """
    1、获取所有股票的代码和名称
    2、将股票代码、名称写入CSV文件（目的是配对这些股票，如果自己配置的文件调用此方法就不会再写入了）
    3、
    """
    # 读取csv文件
    df = readCsv();
    #如果dataArr是空pandas DataFrame,说明没有股票池，需要自己把所有的股票都抓取下来
    if df.empty:
        df = get_all_stock_code();
        writeToCsv(df);
    # 获取昨天的股票数据

    # 如果现在小于下午1点，获取当下的实时数据。 如果大于1点就要获取当下9:30-11:30之前的数据
   
    
        
    # df1 = pd.DataFrame(info_list)
    # stock_zh_a_spot_em_df.to_excel('excel1.xlsx', sheet_name='Sheet1', index=False) # index false为不写入索引

